import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un espacio que forma parte del tablero (son 100).
 * @author Miguel Martinez Aguilar
 * @version 23 de Marzo del 2013
 */
public class Espacio extends ScrollActor
{
    // Declaracion de variables de instancia
    private GreenfootImage[] img;// un arreglo de 3 imagenes que usara el espacio.
    private Barco barco;// un posible barco que contenga el espacio.
    private int fila;// la fila donde se encuentra este espacio en el tablero.
    private int col;// la columna donde se encuentra este espacio en el tablero.
    private int posicion;// si hay barco, este numero sera la posicion de este espacio en el barco.
    private Tablero tablero;// es el tablero donde se encuentra este espacio.
    
    /**
     * Constructor de Espacio.
     * @param imagen: el nombre de las imagenes que usaraeste Espacio.
     * @param revez: un boleano que indica si la imagen de este objeto se volteara al revez.
     * @param fila: la fila en la que se encuentra este Espacio dentro del tablero.
     * @param col: la columna en la que se encuentra este Espacio dentro del tablero.
     * @param tablero: el tablero donde se encuentra este Espacio.
     */
    public Espacio(String imagen, boolean revez, int fila, int col, Tablero tablero) 
    {
        img = new GreenfootImage[3];
        img[0] = new GreenfootImage(imagen);
        img[1] = new GreenfootImage("b" + imagen);
        img[2] = new GreenfootImage("r" + imagen);
        if(revez){
            img[0].mirrorHorizontally();
            img[1].mirrorHorizontally();
        }
        this.setImage(img[0]);
        barco = null;
        this.fila = fila;
        this.col = col;
        this.posicion = 0;
        this.tablero = tablero;
    } 
    
    /**
     * Este metodo resalta el espacio seleccionado.
     * @param val: un boleano que indica si este objeto se resalta.
     */
    public void resalta(boolean val)
    {
        if(val)super.setImage(img[1]);
        else super.setImage(img[0]);
    }
    
    /**
     * Este metodo resalta el espacio seleccionado en rojo.
     */
    public void resaltaRojo()
    {
        super.setImage(img[2]);
    }
    
    /**
     * Este metodo dice si hay barco en este espacio. <p>
     * Regresa un barco.
     */
    public Barco hayBarco()
    {
        return barco;
    }
    
    /**
     * Este metodo devuelve la posision X de este espacio en la matriz. <p>
     * Regresa un entero.
     */
    public int fila()
    {
        return fila;
    }
    
    /**
     * Este metodo devuelve la posision Y de este espacio en la matriz. <p>
     * Regresa un entero.
     */
    public int col()
    {
        return col;
    }
    
    /**
     * Este metodo le asigna a este Espacio una posicion en el barco
     * @param barc: un barco que se encontrara en este Espacio.
     * @param posicion: la posicion del barco en donde se localiza este Espacio.
     */
    public void tomaBarco(Barco barc, int posicion)
    {
        barco = barc;
        this.posicion = posicion;
    }
    
    /**
     * Este metodo le indica al espacio que ha sido impactado. <p>
     * Regresa un boleano.
     */
    public boolean impactaBarco()
    {
        boolean val = barco.herir(posicion);
        barco = null;
        return val;
    }
    
    /**
     * Este metodo verifica si existe un espacio en las coordenadas especificas. <p>
     * Regresa un Espacio.
     * @param fila: un numero que indique la fila de un tablero.
     * @param col: un numero que indique la columna de un tablero.
     */
    public Espacio hayEspacio(int fila, int col)
    {
        return tablero.hayEspacio(fila,col);
    }
    
    /**
     * Este metodo quita a este espacio de la matriz
     */
    public void quitarDeTablero()
    {
        tablero.quitaEsp(fila,col);
    }
}
